/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vetAdmin.dao.implementation;

//import com.tutorialjava.bd.ControladorBD;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import vetAdmin.dao.ClienteDAO;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.swing.DefaultListModel;

import javax.swing.JOptionPane;

import vetAdmin.model.Cliente;
import vetAdmin.model.Paciente;

/**
 *
 * @author Jony
 */
public class ClienteDAOJDBC {/*implements ClienteDAO{
	
	ArrayList<Cliente> clientes = new ArrayList<Cliente>();*/
	
	
/*	private Cliente newCliente(){
	
		Cliente cliente = new Cliente(ControladorBD.getInt("ID"),
				ControladorBD.getString("nombre"),
				ControladorBD.getString("direccion"),
				ControladorBD.getString("telefono"),
				ControladorBD.getInt("localidad"),
				ControladorBD.getInt("provincia"),
				ControladorBD.getString("cp"),
				ControladorBD.getString("codArea1"),
				ControladorBD.getString("codArea2"),
				ControladorBD.getString("celular"),
				ControladorBD.getString("email"), 
                                ControladorBD.getDate("fecha_alta"),
                                ControladorBD.getDate("fecha_ult"));
		
		return cliente;
		
	}
	
	private Paciente newPaciente() {
		
		Paciente paciente = new Paciente (ControladorBD.getInt("ID"),
				ControladorBD.getString("nombre"),
				ControladorBD.getString("especie"),
				ControladorBD.getString("raza"),
				ControladorBD.getString("edad"),
				ControladorBD.getString("pelaje"),
				ControladorBD.getString("sexo"),
				ControladorBD.getString("microchip"),
				ControladorBD.getDate("fechaDeNacimiento"),
				ControladorBD.getDate("fechaDeAlta"),
				ControladorBD.getDate("fechaUltimaVisita"), 
				ControladorBD.getInt("cliente_ID"));		
	
		return paciente;
	}*/
/*
	public int nextIdValue() {
    	
    	int nextId = 0;
    	
    	try {
         	
         	nextId = ControladorBD.maximoValorCampo("clientes", "ID");
         	 		
         } catch (Exception e) {
 		
 			}
    	
    	return nextId + 1;
    }
*/
/*
    @Override
    public Cliente getById(Connection conn, long id) throws SQLException {
    	
    	Cliente cliente = null;
    	
        String laInsercion = "SELECT * FROM clientes WHERE ID = " +id;

        System.out.println("La inserción ha sido realizada con éxito...");
        Statement stmtInsercion = conn.createStatement();

    	try {*/
/*			ControladorBD.addSql(sql);
			ControladorBD.execute();
			
			if (ControladorBD.finRecordSet()) {
				
				cliente = newCliente();
			
			}
*/
/*
            stmtInsercion.execute(laInsercion);
    	}
        catch (Exception e) {
			
        } finally {
            stmtInsercion.close();
            conn.close();
        }
    	
    	return cliente;
	
    }
    
    

    @Override
    public Cliente getByName(String name) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    
    @Override
    public ArrayList<Cliente> getAll() {
        
    	String sql = "SELECT * FROM clientes ORDER BY nombre";
		
		try {
			
			ControladorBD.addSql(sql);
			ControladorBD.execute();
			
			while (ControladorBD.finRecordSet()) {			
				
				Cliente cliente = new Cliente();//newCliente();
				clientes.add(cliente);			
			
			}
    	
		} catch (Exception e) {
			// TODO: handle exception 
			
		}
		
		return clientes;
    }
*/
    public static DefaultListModel getClientes(Connection conn) throws SQLException {
        String laConsulta = "SELECT * FROM clientes";
        Statement stmtConsulta = conn.createStatement();
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);


        Cliente clienteAux;
        DefaultListModel aux=new DefaultListModel();

        while (rs.next()){
            clienteAux=new Cliente();
            clienteAux.setId(rs.getInt("id_cliente"));
            clienteAux.setNombre(rs.getString("apellidonombre"));
            clienteAux.setDireccion(rs.getString("direccion"));
            clienteAux.setCp(rs.getString("cp"));
            clienteAux.setLocalidad(rs.getInt("id_localidad"));
            clienteAux.setProvincia(rs.getInt("id_provincia"));
            clienteAux.setCodArea1(rs.getString("codarea_tel"));
            clienteAux.setTelefono(rs.getString("telefono"));
            clienteAux.setCodArea2(rs.getString("codarea_cel"));
            clienteAux.setCelular(rs.getString("cel"));
            clienteAux.setEmail(rs.getString("email"));
            clienteAux.setFechaAlta(rs.getString("fecha_alta"));
            clienteAux.setFechaUltimaVisita(rs.getString("fecha_ultima"));
            aux.addElement(clienteAux);

        }
        // Cierra el Statement y la Connection
        stmtConsulta.close();
        conn.close();
        return aux;
    }
/*
    public ArrayList<Paciente> getPacientes(int id) {
    	String sql = "SELECT * FROM pacientes WHERE cliente_ID ="+id;		
    	ArrayList<Paciente> pacientes = new ArrayList<Paciente>();
    	try {
            ControladorBD.addSql(sql);
            ControladorBD.execute();
            while (ControladorBD.finRecordSet()) {
                    Paciente paciente = new Paciente();//newPaciente();
                    pacientes.add(paciente);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return pacientes;
    }
*/


    public void modificar(Connection conn, Cliente c)throws Exception {
        //conn = AdministradorDeConexiones.getConnection();

        // Arma la sentencia de actualización y la ejecuta
        //String laActualizacion = "UPDATE clientes SET nombre='"+getNombre()+"', ve_apellido='"+getApellido()+"', ve_dni='"+getNumeroDocumento()+"', ve_vendidos="+String.valueOf(getCantAutosVendidos())+" WHERE ve_id="+getId();

        String laActualizacion = "UPDATE veterinaria.clientes SET apellidonombre='"+c.getNombre()+"',direccion='"+c.getDireccion()+"',cp='"+c.getCp()+"',id_localidad="+String.valueOf(c.getLocalidad())+",id_provincia="+String.valueOf(c.getProvincia())+",codarea_tel='"+c.getCodArea1()+"',telefono='"+c.getTelefono()+"',codarea_cel='"+c.getCodArea2()+"',cel='"+c.getCelular()+"',email='"+c.getEmail()+"',fecha_alta='"+c.getFechaAlta()+"',fecha_ultima='"+c.getFechaUltimaVisita()+"' WHERE id_cliente="+c.getId();
        System.out.println(laActualizacion);
        Statement stmtActualizacion = conn.createStatement();
        stmtActualizacion.execute(laActualizacion);

        // Cierra el Statement y la Connection
        stmtActualizacion.close();
        conn.close();

        // Informa que la actualización ha sido realizada con éxito
        System.out.println("La actualización ha sido realizada con éxito...");
    }


/*
    @Override
    public void save(Cliente cliente) {
    	Integer id = cliente.getId();
    	String sql = "";
    	try {
    		Integer idBuscado = (Integer) ControladorBD.buscarCampo("clientes", "ID", id, "ID"); // si no encuentra retorna NULL
                if (idBuscado == null) { // hay que crear un nuevo registro
                    sql = "INSERT INTO clientes (ID, nombre, direccion, cp, localidad, provincia, codArea1, telefono, codArea2, celular, email) " +
                          "  VALUES ("+id+", '"+ cliente.getNombre() +"', '"+cliente.getDireccion()+"', '"+ cliente.getCp()+"'," +
                          "  '"+ cliente.getLocalidad() +"', '"+ cliente.getProvincia() +"', '"+ cliente.getCodArea1() +"'," +
                          "  '"+ cliente.getTelefono() +"','"+ cliente.getCodArea2() +"'," + "'"+ cliente.getCelular() +"', '"+ cliente.getEmail() +"')";
                } else { //actualizo
			sql = "UPDATE clientes SET ID = "+ id +", nombre = '"+ cliente.getNombre() +"', direccion = '"+cliente.getDireccion()+"', cp = '"+ cliente.getCp() +"', " +
                              "localidad = '"+ cliente.getLocalidad() +"', provincia = '"+ cliente.getProvincia() +"', codArea1 = '"+ cliente.getCodArea1() +"', telefono = '"+cliente.getTelefono() +"', " +
                              "codArea2 = '"+ cliente.getCodArea2() +"', celular = '"+ cliente.getCelular() +"', email = '"+ cliente.getEmail() +"' WHERE ID = "+ id +" ";
                }
    		ControladorBD.addSql(sql);
    		ControladorBD.execute();
        } catch (Exception e) {
                 JOptionPane.showMessageDialog(null,"Error" + e.getMessage());
                 e.printStackTrace();
        }
    }
*/

    public void eliminar(Connection conn, Cliente c)throws Exception {
        String laEliminacion = "DELETE FROM clientes WHERE ve_id ="+c.getId();
        Statement stmtEliminacion = conn.createStatement();
        stmtEliminacion.execute(laEliminacion);

        // Cierra el Statement y la Connection
        stmtEliminacion.close();
        conn.close();

        // Informa que la eliminación ha sido realizada con éxito
        System.out.println("La eliminación ha sido realizada con éxito...");
    }



/*

    @Override
    public void deleteById(long id) {
        String sql = "DELETE FROM clientes WHERE id = " + id;
        try {
            ControladorBD.addSql(sql);
            ControladorBD.execute();
        } catch (Exception ex) {
            Logger.getLogger(ClienteDAOJDBC.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
*/
    public void insertar(Connection conn, Cliente c)throws Exception{
        //conn = AdministradorDeConexiones.getConnection();

        // Arma la sentencia de inserción y la ejecuta
        String laInsercion = "INSERT INTO veterinaria.clientes (apellidonombre, direccion, cp, id_localidad, id_provincia, codarea_tel, telefono, codarea_cel, cel, email, fecha_alta, fecha_ultima) VALUES ('"+
                                                     c.getNombre()+"','"+c.getDireccion()+"','"+c.getCp()+"',"+c.getLocalidad()+","+c.getProvincia()+",'"+c.getCodArea1()+"','"+c.getTelefono()+"','"+c.getCodArea2()+"','"+c.getCelular()+"','"+c.getEmail()+"','"+c.getFechaAlta()+"','"+c.getFechaUltimaVisita()+"');";
        System.out.println(laInsercion);
        Statement stmtInsercion = conn.createStatement();
        stmtInsercion.execute(laInsercion);

        // Cierra el Statement y la Connection
        stmtInsercion.close();
        conn.close();

        // Informa que la inserción ha sido realizada con éxito
        System.out.println("La inserción ha sido realizada con éxito...");

    }


    public static DefaultListModel buscarPorNombre(Connection conn, String nombre )throws Exception{
        String laBusqueda = "SELECT * FROM veterinaria.clientes WHERE apellidonombre like '"+nombre+"%';";
        System.out.println(laBusqueda);
        Statement stmtBusqueda = conn.createStatement();

        ResultSet rs = stmtBusqueda.executeQuery(laBusqueda);        
        Cliente clienteAux;
        DefaultListModel aux=new DefaultListModel();

        while (rs.next()){
            clienteAux=new Cliente();
            clienteAux.setId(rs.getInt("id_cliente"));
            clienteAux.setNombre(rs.getString("apellidonombre"));
            clienteAux.setDireccion(rs.getString("direccion"));
            clienteAux.setCp(rs.getString("cp"));
            clienteAux.setLocalidad(rs.getInt("id_localidad"));
            clienteAux.setProvincia(rs.getInt("id_provincia"));
            clienteAux.setCodArea1(rs.getString("codarea_tel"));
            clienteAux.setTelefono(rs.getString("telefono"));
            clienteAux.setCodArea2(rs.getString("codarea_cel"));
            clienteAux.setCelular(rs.getString("cel"));
            clienteAux.setEmail(rs.getString("email"));
            clienteAux.setFechaAlta(rs.getString("fecha_alta"));
            clienteAux.setFechaUltimaVisita(rs.getString("fecha_ultima"));
            aux.addElement(clienteAux);

        }
        // Cierra el Statement y la Connection
        stmtBusqueda.close();
        conn.close();

        // Informa que la inserción ha sido realizada con éxito
        System.out.println("La busqueda ha sido realizada con éxito...");
        
        
        return aux;        
    }

    

    public static DefaultListModel buscarPorPacientes(Connection conn, String nombre )throws Exception{
        String laBusqueda = "select * from veterinaria.clientes where id_cliente in (select id_cliente from veterinaria.pacientes where "
                + "nombre like '"+nombre+"%')";
        System.out.println(laBusqueda);
        Statement stmtBusqueda = conn.createStatement();

        ResultSet rs = stmtBusqueda.executeQuery(laBusqueda);        
        Cliente clienteAux;
        DefaultListModel aux=new DefaultListModel();

        while (rs.next()){
            clienteAux=new Cliente();
            clienteAux.setId(rs.getInt("id_cliente"));
            clienteAux.setNombre(rs.getString("apellidonombre"));
            clienteAux.setDireccion(rs.getString("direccion"));
            clienteAux.setCp(rs.getString("cp"));
            clienteAux.setLocalidad(rs.getInt("id_localidad"));
            clienteAux.setProvincia(rs.getInt("id_provincia"));
            clienteAux.setCodArea1(rs.getString("codarea_tel"));
            clienteAux.setTelefono(rs.getString("telefono"));
            clienteAux.setCodArea2(rs.getString("codarea_cel"));
            clienteAux.setCelular(rs.getString("cel"));
            clienteAux.setEmail(rs.getString("email"));
            clienteAux.setFechaAlta(rs.getString("fecha_alta"));
            clienteAux.setFechaUltimaVisita(rs.getString("fecha_ultima"));
            aux.addElement(clienteAux);

        }
        // Cierra el Statement y la Connection
        stmtBusqueda.close();
        conn.close();

        // Informa que la inserción ha sido realizada con éxito
        System.out.println("La busqueda ha sido realizada con éxito...");
        
        
        return aux;        
    }    
    


    public static Cliente buscarPorPaciente(Connection conn, int id_paciente )throws Exception{
        String laBusqueda = "select * from veterinaria.clientes where id_cliente in (select id_cliente from veterinaria.pacientes where "
                + "id_paciente = "+id_paciente+")";
        System.out.println(laBusqueda);
        Statement stmtBusqueda = conn.createStatement();

        ResultSet rs = stmtBusqueda.executeQuery(laBusqueda);        
        Cliente clienteAux=null;
        //DefaultListModel aux=new DefaultListModel();

        while (rs.next()){
            clienteAux=new Cliente();
            clienteAux.setId(rs.getInt("id_cliente"));
            clienteAux.setNombre(rs.getString("apellidonombre"));
            clienteAux.setDireccion(rs.getString("direccion"));
            clienteAux.setCp(rs.getString("cp"));
            clienteAux.setLocalidad(rs.getInt("id_localidad"));
            clienteAux.setProvincia(rs.getInt("id_provincia"));
            clienteAux.setCodArea1(rs.getString("codarea_tel"));
            clienteAux.setTelefono(rs.getString("telefono"));
            clienteAux.setCodArea2(rs.getString("codarea_cel"));
            clienteAux.setCelular(rs.getString("cel"));
            clienteAux.setEmail(rs.getString("email"));
            clienteAux.setFechaAlta(rs.getString("fecha_alta"));
            clienteAux.setFechaUltimaVisita(rs.getString("fecha_ultima"));
            //aux.addElement(clienteAux);

        }
        // Cierra el Statement y la Connection
        stmtBusqueda.close();
        conn.close();

        // Informa que la inserción ha sido realizada con éxito
        System.out.println("La busqueda ha sido realizada con éxito...");
        
        
        return clienteAux;        
    }        
    
    
}
